package usbcali.edu.co.pqrs.presentation.backingBeans;

import java.io.Serializable;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import org.primefaces.component.calendar.Calendar;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.inputtextarea.InputTextarea;
import org.primefaces.component.selectonemenu.SelectOneMenu;
import org.primefaces.context.RequestContext;
import org.primefaces.event.RowEditEvent;

import usbcali.edu.co.pqrs.exceptions.ZMessManager;
import usbcali.edu.co.pqrs.modelo.AnexosPqr;
import usbcali.edu.co.pqrs.modelo.dto.AnexosPqrDTO;
import usbcali.edu.co.pqrs.presentation.businessDelegate.IBusinessDelegatorView;
import usbcali.edu.co.pqrs.utilities.FacesUtils;
import usbcali.edu.co.pqrs.utilities.Utilities;

/**
 * @author Zathura Code Generator http://code.google.com/p/zathura
 * 
 */
@ManagedBean
@ViewScoped
public class AnexosPqrView implements Serializable {
	private static final long serialVersionUID = 1L;

	private InputTextarea txtDescripcionAnexo;
	private String descripcion;

	// private InputText txtEstadoRegistro;

	private SelectOneMenu estado;
	private String estadoRegistro;

	private InputText txtUsuarioCreador;
	private InputText txtUsuarioUltimaModificacion;
	private InputText txtIdAnexoPqr;
	private Calendar txtFechaCreacion;
	private Calendar txtFechaUltimaModificacion;
	private CommandButton btnSave;
	private CommandButton btnModify;
	private CommandButton btnDelete;
	private CommandButton btnClear;
	private CommandButton btnReturn;

	private List<AnexosPqrDTO> data;
	private AnexosPqrDTO selectedAnexosPqr;
	private AnexosPqr entity;
	private boolean showDialog;
	@ManagedProperty(value = "#{BusinessDelegatorView}")
	private IBusinessDelegatorView businessDelegatorView;

	private SelectItem[] manufacturerOptions;
	String manufacturers[] = { "A", "R" };

	public AnexosPqrView() {
		super();

		setManufacturerOptions(createFilterOptions(manufacturers));
	}

	public String action_back() {

		return "/menu2.xhtml?faces-redirect=true";
	}

	public void rowEventListener(RowEditEvent e) {
		try {
			AnexosPqrDTO anexosPqrDTO = (AnexosPqrDTO) e.getObject();

			if (txtDescripcionAnexo == null) {
				txtDescripcionAnexo = new InputTextarea();
			}

			txtDescripcionAnexo.setValue(anexosPqrDTO.getDescripcionAnexo());

			// if (txtEstadoRegistro == null) {
			// txtEstadoRegistro = new InputText();
			// }
			//
			// txtEstadoRegistro.setValue(anexosPqrDTO.getEstadoRegistro());

			if (txtUsuarioCreador == null) {
				txtUsuarioCreador = new InputText();
			}

			txtUsuarioCreador.setValue(anexosPqrDTO.getUsuarioCreador());

			if (txtUsuarioUltimaModificacion == null) {
				txtUsuarioUltimaModificacion = new InputText();
			}

			txtUsuarioUltimaModificacion.setValue(anexosPqrDTO
					.getUsuarioUltimaModificacion());

			if (txtIdAnexoPqr == null) {
				txtIdAnexoPqr = new InputText();
			}

			txtIdAnexoPqr.setValue(anexosPqrDTO.getIdAnexoPqr());

			if (txtFechaCreacion == null) {
				txtFechaCreacion = new Calendar();
			}

			txtFechaCreacion.setValue(anexosPqrDTO.getFechaCreacion());

			if (txtFechaUltimaModificacion == null) {
				txtFechaUltimaModificacion = new Calendar();
			}

			txtFechaUltimaModificacion.setValue(anexosPqrDTO
					.getFechaUltimaModificacion());

			Long idAnexoPqr = FacesUtils.checkLong(txtIdAnexoPqr);
			entity = businessDelegatorView.getAnexosPqr(idAnexoPqr);

			action_modify();
		} catch (Exception ex) {
		}
	}

	public String action_new() {
		action_clear();
		selectedAnexosPqr = null;
		setShowDialog(true);

		return "";
	}

	public String action_clear() {
		entity = null;
		selectedAnexosPqr = null;

		if (txtDescripcionAnexo != null) {
			txtDescripcionAnexo.setValue(null);
//			txtDescripcionAnexo.setDisabled(true);
		}

		// if (txtEstadoRegistro != null) {
		// txtEstadoRegistro.setValue(null);
		// txtEstadoRegistro.setDisabled(true);
		// }

		if (txtUsuarioCreador != null) {
			txtUsuarioCreador.setValue(null);
			txtUsuarioCreador.setDisabled(true);
		}

		if (txtUsuarioUltimaModificacion != null) {
			txtUsuarioUltimaModificacion.setValue(null);
			txtUsuarioUltimaModificacion.setDisabled(true);
		}

		if (txtFechaCreacion != null) {
			txtFechaCreacion.setValue(null);
			txtFechaCreacion.setDisabled(true);
		}

		if (txtFechaUltimaModificacion != null) {
			txtFechaUltimaModificacion.setValue(null);
			txtFechaUltimaModificacion.setDisabled(true);
		}

		if (txtIdAnexoPqr != null) {
			txtIdAnexoPqr.setValue(null);
			txtIdAnexoPqr.setDisabled(false);
		}

		if (btnSave != null) {
//			btnSave.setDisabled(true);
		}

		if (btnDelete != null) {
			btnDelete.setDisabled(true);
		}

		return "";
	}

	public void listener_txtFechaCreacion() {
		Date inputDate = (Date) txtFechaCreacion.getValue();
		DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
		FacesContext.getCurrentInstance().addMessage(
				"",
				new FacesMessage("Selected Date "
						+ dateFormat.format(inputDate)));
	}

	public void listener_txtFechaUltimaModificacion() {
		Date inputDate = (Date) txtFechaUltimaModificacion.getValue();
		DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
		FacesContext.getCurrentInstance().addMessage(
				"",
				new FacesMessage("Selected Date "
						+ dateFormat.format(inputDate)));
	}

	public void listener_txtId() {
		try {
			Long idAnexoPqr = FacesUtils.checkLong(txtIdAnexoPqr);
			entity = (idAnexoPqr != null) ? businessDelegatorView
					.getAnexosPqr(idAnexoPqr) : null;
		} catch (Exception e) {
			entity = null;
		}

		if (entity == null) {
			txtDescripcionAnexo.setDisabled(false);
			// txtEstadoRegistro.setDisabled(false);
			txtUsuarioCreador.setDisabled(false);
			txtUsuarioUltimaModificacion.setDisabled(false);
			txtFechaCreacion.setDisabled(false);
			txtFechaUltimaModificacion.setDisabled(false);
			txtIdAnexoPqr.setDisabled(false);
			btnSave.setDisabled(false);
		} else {
			txtDescripcionAnexo.setValue(entity.getDescripcionAnexo());
			txtDescripcionAnexo.setDisabled(false);
			// txtEstadoRegistro.setValue(entity.getEstadoRegistro());
			// txtEstadoRegistro.setDisabled(false);
			txtFechaCreacion.setValue(entity.getFechaCreacion());
			txtFechaCreacion.setDisabled(false);
			txtFechaUltimaModificacion.setValue(entity
					.getFechaUltimaModificacion());
			txtFechaUltimaModificacion.setDisabled(false);
			txtUsuarioCreador.setValue(entity.getUsuarioCreador());
			txtUsuarioCreador.setDisabled(false);
			txtUsuarioUltimaModificacion.setValue(entity
					.getUsuarioUltimaModificacion());
			txtUsuarioUltimaModificacion.setDisabled(false);
			txtIdAnexoPqr.setValue(entity.getIdAnexoPqr());
			txtIdAnexoPqr.setDisabled(true);
			btnSave.setDisabled(false);

			if (btnDelete != null) {
				btnDelete.setDisabled(false);
			}
		}
	}

	public String action_edit(ActionEvent evt) {
		selectedAnexosPqr = (AnexosPqrDTO) (evt.getComponent().getAttributes()
				.get("selectedAnexosPqr"));
		txtDescripcionAnexo.setValue(selectedAnexosPqr.getDescripcionAnexo());
		txtDescripcionAnexo.setDisabled(false);
		// txtEstadoRegistro.setValue(selectedAnexosPqr.getEstadoRegistro());
		// txtEstadoRegistro.setDisabled(false);
		txtFechaCreacion.setValue(selectedAnexosPqr.getFechaCreacion());
		txtFechaCreacion.setDisabled(false);
		txtFechaUltimaModificacion.setValue(selectedAnexosPqr
				.getFechaUltimaModificacion());
		txtFechaUltimaModificacion.setDisabled(false);
		txtUsuarioCreador.setValue(selectedAnexosPqr.getUsuarioCreador());
		txtUsuarioCreador.setDisabled(false);
		txtUsuarioUltimaModificacion.setValue(selectedAnexosPqr
				.getUsuarioUltimaModificacion());
		txtUsuarioUltimaModificacion.setDisabled(false);
		txtIdAnexoPqr.setValue(selectedAnexosPqr.getIdAnexoPqr());
		txtIdAnexoPqr.setDisabled(true);
		btnSave.setDisabled(false);
		setShowDialog(true);

		return "";
	}

	public String action_save() {
		try {
			if ((selectedAnexosPqr == null) && (entity == null)) {
				action_create();
			} else {
				action_modify();
			}

			data = null;
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_create() {
		try {
			entity = new AnexosPqr();

			// Long idAnexoPqr = FacesUtils.checkLong(txtIdAnexoPqr);

			entity.setDescripcionAnexo(FacesUtils.checkString((txtDescripcionAnexo)).toUpperCase());

			entity.setEstadoRegistro(estadoRegistro);

			// entity.setEstadoRegistro(FacesUtils.checkString(txtEstadoRegistro));
			//
			// entity.setFechaCreacion(FacesUtils.checkDate(txtFechaCreacion));
			// entity.setFechaUltimaModificacion(FacesUtils
			// .checkDate(txtFechaUltimaModificacion));
			// entity.setIdAnexoPqr(idAnexoPqr);
			// entity.setUsuarioCreador(FacesUtils.checkString(txtUsuarioCreador));
			// entity.setUsuarioUltimaModificacion(FacesUtils
			// .checkString(txtUsuarioUltimaModificacion));

			entity.setFechaCreacion(new Date());
			entity.setFechaUltimaModificacion(new Date());
			entity.setUsuarioCreador(FacesUtils.login().toUpperCase());
			entity.setUsuarioUltimaModificacion(FacesUtils.login().toUpperCase());

			businessDelegatorView.saveAnexosPqr(entity);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);

			data = businessDelegatorView.getDataAnexosPqr();

			RequestContext.getCurrentInstance().update("form:listaTDo");

			 action_clear();
		} catch (Exception e) {
			entity = null;
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_modify() {
		try {
			if (entity == null) {
				Long idAnexoPqr = new Long(selectedAnexosPqr.getIdAnexoPqr());
				entity = businessDelegatorView.getAnexosPqr(idAnexoPqr);
			}

			entity.setDescripcionAnexo(FacesUtils
					.checkString(txtDescripcionAnexo));
			// entity.setEstadoRegistro(FacesUtils.checkString(txtEstadoRegistro));
			entity.setFechaCreacion(FacesUtils.checkDate(txtFechaCreacion));
			entity.setFechaUltimaModificacion(FacesUtils
					.checkDate(txtFechaUltimaModificacion));
			entity.setUsuarioCreador(FacesUtils.checkString(txtUsuarioCreador));
			entity.setUsuarioUltimaModificacion(FacesUtils
					.checkString(txtUsuarioUltimaModificacion));
			businessDelegatorView.updateAnexosPqr(entity);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
		} catch (Exception e) {
			data = null;
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_delete_datatable(ActionEvent evt) {
		try {
			selectedAnexosPqr = (AnexosPqrDTO) (evt.getComponent()
					.getAttributes().get("selectedAnexosPqr"));

			Long idAnexoPqr = new Long(selectedAnexosPqr.getIdAnexoPqr());
			entity = businessDelegatorView.getAnexosPqr(idAnexoPqr);
			action_delete();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_delete_master() {
		try {
			Long idAnexoPqr = FacesUtils.checkLong(txtIdAnexoPqr);
			entity = businessDelegatorView.getAnexosPqr(idAnexoPqr);
			action_delete();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public void action_delete() throws Exception {
		try {
			businessDelegatorView.deleteAnexosPqr(entity);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
			action_clear();
			data = null;
		} catch (Exception e) {
			throw e;
		}
	}

	public String action_closeDialog() {
		setShowDialog(false);
		action_clear();

		return "";
	}

	public String actionDeleteDataTableEditable(ActionEvent evt) {
		try {
			selectedAnexosPqr = (AnexosPqrDTO) (evt.getComponent()
					.getAttributes().get("selectedAnexosPqr"));

			Long idAnexoPqr = new Long(selectedAnexosPqr.getIdAnexoPqr());
			entity = businessDelegatorView.getAnexosPqr(idAnexoPqr);
			businessDelegatorView.deleteAnexosPqr(entity);
			data.remove(selectedAnexosPqr);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_modifyWitDTO(String descripcionAnexo,
			String estadoRegistro, Date fechaCreacion,
			Date fechaUltimaModificacion, Long idAnexoPqr,
			String usuarioCreador, String usuarioUltimaModificacion)
			throws Exception {
		try {
			entity.setDescripcionAnexo(FacesUtils.checkString(descripcionAnexo));
			entity.setEstadoRegistro(FacesUtils.checkString(estadoRegistro));
			entity.setFechaCreacion(FacesUtils.checkDate(fechaCreacion));
			entity.setFechaUltimaModificacion(FacesUtils
					.checkDate(fechaUltimaModificacion));
			entity.setUsuarioCreador(FacesUtils.checkString(usuarioCreador));
			entity.setUsuarioUltimaModificacion(FacesUtils
					.checkString(usuarioUltimaModificacion));
			businessDelegatorView.updateAnexosPqr(entity);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
		} catch (Exception e) {
			// renderManager.getOnDemandRenderer("AnexosPqrView").requestRender();
			FacesUtils.addErrorMessage(e.getMessage());
			throw e;
		}

		return "";
	}

	public InputTextarea getTxtDescripcionAnexo() {
		return txtDescripcionAnexo;
	}

	public void setTxtDescripcionAnexo(InputTextarea txtDescripcionAnexo) {
		this.txtDescripcionAnexo = txtDescripcionAnexo;
	}

	//
	// public InputText getTxtEstadoRegistro() {
	// return txtEstadoRegistro;
	// }
	//
	// public void setTxtEstadoRegistro(InputText txtEstadoRegistro) {
	// this.txtEstadoRegistro = txtEstadoRegistro;
	// }

	public InputText getTxtUsuarioCreador() {
		return txtUsuarioCreador;
	}

	public void setTxtUsuarioCreador(InputText txtUsuarioCreador) {
		this.txtUsuarioCreador = txtUsuarioCreador;
	}

	public InputText getTxtUsuarioUltimaModificacion() {
		return txtUsuarioUltimaModificacion;
	}

	public void setTxtUsuarioUltimaModificacion(
			InputText txtUsuarioUltimaModificacion) {
		this.txtUsuarioUltimaModificacion = txtUsuarioUltimaModificacion;
	}

	public Calendar getTxtFechaCreacion() {
		return txtFechaCreacion;
	}

	public void setTxtFechaCreacion(Calendar txtFechaCreacion) {
		this.txtFechaCreacion = txtFechaCreacion;
	}

	public Calendar getTxtFechaUltimaModificacion() {
		return txtFechaUltimaModificacion;
	}

	public void setTxtFechaUltimaModificacion(
			Calendar txtFechaUltimaModificacion) {
		this.txtFechaUltimaModificacion = txtFechaUltimaModificacion;
	}

	public InputText getTxtIdAnexoPqr() {
		return txtIdAnexoPqr;
	}

	public void setTxtIdAnexoPqr(InputText txtIdAnexoPqr) {
		this.txtIdAnexoPqr = txtIdAnexoPqr;
	}

	public List<AnexosPqrDTO> getData() {
		try {
			if (data == null) {
				data = businessDelegatorView.getDataAnexosPqr();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		return data;
	}

	public void setData(List<AnexosPqrDTO> anexosPqrDTO) {
		this.data = anexosPqrDTO;
	}

	public AnexosPqrDTO getSelectedAnexosPqr() {
		return selectedAnexosPqr;
	}

	public void setSelectedAnexosPqr(AnexosPqrDTO anexosPqr) {
		this.selectedAnexosPqr = anexosPqr;
	}

	public CommandButton getBtnSave() {
		return btnSave;
	}

	public void setBtnSave(CommandButton btnSave) {
		this.btnSave = btnSave;
	}

	public CommandButton getBtnModify() {
		return btnModify;
	}

	public void setBtnModify(CommandButton btnModify) {
		this.btnModify = btnModify;
	}

	public CommandButton getBtnDelete() {
		return btnDelete;
	}

	public void setBtnDelete(CommandButton btnDelete) {
		this.btnDelete = btnDelete;
	}

	public CommandButton getBtnClear() {
		return btnClear;
	}

	public void setBtnClear(CommandButton btnClear) {
		this.btnClear = btnClear;
	}

	public TimeZone getTimeZone() {
		return java.util.TimeZone.getDefault();
	}

	public IBusinessDelegatorView getBusinessDelegatorView() {
		return businessDelegatorView;
	}

	public void setBusinessDelegatorView(
			IBusinessDelegatorView businessDelegatorView) {
		this.businessDelegatorView = businessDelegatorView;
	}

	public boolean isShowDialog() {
		return showDialog;
	}

	public void setShowDialog(boolean showDialog) {
		this.showDialog = showDialog;
	}

	public SelectOneMenu getEstado() {
		return estado;
	}

	public void setEstado(SelectOneMenu estado) {
		this.estado = estado;
	}

	public String getEstadoRegistro() {
		return estadoRegistro;
	}

	public void setEstadoRegistro(String estadoRegistro) {
		this.estadoRegistro = estadoRegistro;
	}

	public SelectItem[] getManufacturerOptions() {
		return manufacturerOptions;
	}

	public void setManufacturerOptions(SelectItem[] manufacturerOptions) {
		this.manufacturerOptions = manufacturerOptions;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	private SelectItem[] createFilterOptions(String[] data) {
		SelectItem[] options = new SelectItem[data.length + 1];

		options[0] = new SelectItem("", "Seleccionar");
		for (int i = 0; i < data.length; i++) {
			options[i + 1] = new SelectItem(data[i], data[i]);
		}

		return options;
	}

	public void onEdit(org.primefaces.event.RowEditEvent event) {

		try {

			entity = null;
			entity = businessDelegatorView.getAnexosPqr(((AnexosPqrDTO) event
					.getObject()).getIdAnexoPqr());

			descripcion = ((AnexosPqrDTO) event.getObject())
					.getDescripcionAnexo();
			
			entity.setDescripcionAnexo(descripcion.toString().toUpperCase());
			entity.setEstadoRegistro(estadoRegistro.toString());

			entity.setFechaUltimaModificacion(new Date());
			entity.setUsuarioUltimaModificacion(Utilities.login().toUpperCase());

			businessDelegatorView.updateAnexosPqr(entity);
			data = businessDelegatorView.getDataAnexosPqr();

			RequestContext.getCurrentInstance().reset("form:listaTDo");

			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);

		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
			RequestContext.getCurrentInstance().update("form:msg");
			try {
				data = businessDelegatorView.getDataAnexosPqr();
			} catch (Exception e1) {
				e1.printStackTrace();
			}
		}

	}

	public String action_menu() {

		return "menu.xhtml";
	}

	public void onCancel(org.primefaces.event.RowEditEvent event) {
		FacesMessage msg = new FacesMessage("TipoEstado Cancelled",
				((AnexosPqrDTO) event.getObject()).getIdAnexoPqr() + "");

		FacesContext.getCurrentInstance().addMessage(null, msg);
		System.out.println("Cancelado"
				+ ((AnexosPqrDTO) event.getObject()).getIdAnexoPqr());
	}

	public CommandButton getBtnReturn() {
		return btnReturn;
	}

	public void setBtnReturn(CommandButton btnReturn) {
		this.btnReturn = btnReturn;
	}
}
